import { getConfigByKey } from "@/api/system/config";
import { initCTMap as commInitCTMap } from "@/utils/openLayerCommon.js";
const mapTypeNameObj = {
  amap: "amap",
  tmap: "tmap",
  mapbox: "mapbox",
};
const onlineTypeObj = {
  onLine: "onLine",
  offline: "offline",
};

export function executeFunction(func, param, param2) {
  if (func) {
    if (param != null) {
      func(param, param2);
    } else {
      func();
    }
  }
}

/**
 * 根据字典值获取地图类型
 * @param fn
 */
export function getMapTypeByKey(fn) {
  let result;
  let mapType = mapTypeNameObj.amap; //默认高德
  let baseLayerType = onlineTypeObj.onLine; //默认在线
  getConfigByKey("global_map_type").then((response) => {
    if (response.data) {
      if (response.data.configValue === "2") {
        //天地图
        mapType = mapTypeNameObj.tmap;
      }
      if (response.data.configValue === "1") {
        //离线地图mapbox
        baseLayerType = onlineTypeObj.offline;
        mapType = mapTypeNameObj.mapbox;
      }
    }
    result = {
      mapType,
      baseLayerType,
    };
    executeFunction(fn, result);
  });
}

/**
 * 获取瓦片地址
 * @param fn 成功执行
 */
export function getTileUrl(fn) {
  getConfigByKey("global_map_tileurl").then((res) => {
    // configValue 返回瓦片地址
    const tileUrl = res.data?.configValue;
    executeFunction(fn, tileUrl);
  });
}

/**
 * 初始化高德2.0版本地图
 */
export function initCTMap(id, center, mapTypeIndex, zoom, fn) {
  let map = commInitCTMap(id, center, mapTypeIndex, zoom);
  executeFunction(fn, map.map, map.mapMap);
}

/**
 * 实例化 地图切换 缩放工具条 比例尺
 * @param map 必传 初始化地图返回的map
 * @param mapInstance 必传 地图实例
 * @param type 非必传 0默认图层, 1卫星图层
 */
export function initMapTool(map, mapInstance, type) {
  //卫星地图切换
  mapInstance
    .MapType({
      position: "LB", // 定位到左下角
      offset: [20, 45],
      showLayer: type ? type : 0,
    })
    .then((mapType) => {
      mapType.addTo({ map: map.TMap }); //添加控件
    });
  //工具条
  mapInstance
    .ToolBar({
      position: "LB", //定位到左下角
      offset: [113, 40],
    })
    .then((toolBar) => {
      toolBar.addTo({ map: map.TMap }); //添加f控件
    });
  //比例尺
  mapInstance
    .Scale({
      position: "LB", //定位到左下角
      offset: [20, 0],
    })
    .then((Scale) => {
      Scale.addTo({ map: map.TMap }); //添加控件
    });
}
